#include "BufDef.h"


// 为控制台使用的信号量
/* 创建一个动态信号量，初始值是 0 */
rt_sem_t debug_usart_sem;
// 串口9 RS485-3接收信号
rt_sem_t rs485_3_usart_tx_sem;
rt_sem_t rs485_3_usart_rx_sem;
// rs495-3接收邮箱
struct rt_messagequeue rs485_3_usart_rx_mq;

// led运行信号
rt_sem_t led_run_sem;

__attribute__((section(".rodata"))) const Config_Map_Def device_address[CONFIG_ARRAY_SIZE] = {
	{"device_address", "DEVICE_6100_D6_V2_0602000000000001"},
	{"mqtt_user", "ioufev"},
	{"mqtt_passwd", "ioufev"},
	{"mqtt_server", "192.168.1.20"},
	{"mqtt_port", "1883"}
};

/**
* 串口缓冲区定义
*/

// SDRAMB 4K ECC
// 串口接收计数器
__attribute__((at(0x200F0000))) uint32_t u1_rx_size;
__attribute__((at(0x200F0004))) uint32_t u2_rx_size;
__attribute__((at(0x200F0008))) uint32_t u6_rx_size;
__attribute__((at(0x200F000C))) uint32_t u9_rx_size;
// 系统状态标志位
__attribute__((at(0x200F0010))) uint8_t sys_status;
// mqtt客户端ID
__attribute__((at(0x200F0090))) char mqtt_client_id[128];



// SDRAM1 128K
// 串口处理缓冲区
__attribute__((at(0x20000000)))  rt_uint8_t usart_1_rx_app_buf[1024];
__attribute__((at(0x20000400))) rt_uint8_t usart_1_tx_app_buf[1024];
__attribute__((at(0x20000800))) rt_uint8_t usart_2_rx_app_buf[1024];
__attribute__((at(0x20000C00))) rt_uint8_t usart_2_tx_app_buf[1024];
__attribute__((at(0x20001000))) rt_uint8_t usart_6_rx_app_buf[1024];
__attribute__((at(0x20001400))) rt_uint8_t usart_6_tx_app_buf[1024];
__attribute__((at(0x20001800))) rt_uint8_t usart_9_rx_app_buf[1024];
__attribute__((at(0x20001C00))) rt_uint8_t usart_9_tx_app_buf[1024];

// 串口邮箱缓冲区 
__attribute__((at(0x20002000))) rt_uint8_t usart_1_rx_msq_pool[4096]; // 4长度内存池
__attribute__((at(0x20003000))) rt_uint8_t usart_1_tx_msq_pool[4096];
__attribute__((at(0x20004000))) rt_uint8_t usart_2_rx_msq_pool[4096];
__attribute__((at(0x20005000))) rt_uint8_t usart_2_tx_msq_pool[4096];
__attribute__((at(0x20006000))) rt_uint8_t usart_6_rx_msq_pool[4096];
__attribute__((at(0x20007000))) rt_uint8_t usart_6_tx_msq_pool[4096];
__attribute__((at(0x20008000))) rt_uint8_t usart_9_rx_msq_pool[4096];
__attribute__((at(0x20009000))) rt_uint8_t usart_9_tx_msq_pool[4096];
// 控制台邮箱收发缓冲区
__attribute__((at(0x2000A000))) rt_uint8_t usart_3_rx_msq_pool[15360]; // 10长度内存池
// 控制台rx不需要邮箱。这里给别的功能用
__attribute__((at(0x2000DC00))) I2c_Data_Task_Def eeprom_1_write_app_buf;
__attribute__((at(0x2000DC40))) I2c_Data_Task_Def eeprom_1_read_app_buf;

// mqtt缓冲区 共计17280字节
__attribute__((at(0x2000DC80))) rt_uint8_t mqtt_rx_msg_pool[6170]; // 5长度内存池
__attribute__((at(0x2000F49A))) rt_uint8_t mqtt_tx_msg_pool[6170];
__attribute__((at(0x20010CB4))) __IO rt_uint8_t mqtt_rx_msg_buf[1234];
__attribute__((at(0x20011186))) __IO rt_uint8_t mqtt_tx_msg_buf[1234];
__attribute__((at(0x20011658))) rt_uint8_t mqtt_rx_app_buf[1234];
__attribute__((at(0x20011B2A))) rt_uint8_t mqtt_tx_app_buf[1234];

// 这里剩下4字节 0x20011FFC
__attribute__((at(0x20011FFC))) __IO rt_uint32_t crc_buf;

//__attribute__((at(0x2000DC00))) rt_uint8_t usart_3_tx_msq_pool[15360];
// 控制台rx不需要邮箱。这里给别的功能用

// I2C邮箱缓冲区
__attribute__((at(0x20012000))) I2c_Data_Task_Def i2c_2_rx_msq_pool[4]; // 4长度内存池
__attribute__((at(0x20012100))) I2c_Data_Task_Def i2c_2_tx_msq_pool[4];
__attribute__((at(0x20012200))) I2c_Data_Task_Def i2c_4_rx_msq_pool[4];
__attribute__((at(0x20012300))) I2c_Data_Task_Def i2c_4_tx_msq_pool[4];
__attribute__((at(0x20012400))) rt_uint8_t usb_fs_dp_msq_pool[256];
__attribute__((at(0x20012500))) rt_uint8_t usb_fs_dn_msq_pool[256];
__attribute__((at(0x20012600))) rt_uint8_t usb_hs_dp_msq_pool[256];
__attribute__((at(0x20012700))) rt_uint8_t usb_hs_dn_msq_pool[256];

//  0x20012900 - 0x20013FFF
// 收发缓冲区
__attribute__((at(0x20012800))) __IO I2c_Data_Task_Def i2c_2_rx_msq_buf; //*
__attribute__((at(0x20012840))) __IO I2c_Data_Task_Def i2c_2_tx_msq_buf; //*
__attribute__((at(0x20012880))) __IO I2c_Data_Task_Def i2c_4_rx_msq_buf; //*
__attribute__((at(0x200128C0))) __IO I2c_Data_Task_Def i2c_4_tx_msq_buf; //*
__attribute__((at(0x20012900))) __IO rt_uint8_t usb_fs_dp_msq_buf[64]; //*
__attribute__((at(0x20012940))) __IO rt_uint8_t usb_fs_dn_msq_buf[64]; //*
__attribute__((at(0x20012980))) __IO rt_uint8_t usb_hs_dp_msq_buf[64]; //*
__attribute__((at(0x200129C0))) __IO rt_uint8_t usb_hs_dn_msq_buf[64]; //*
// 从0x20012A00继续
// eeprom 外设收发缓冲区
__attribute__((at(0x20012A00))) __IO I2c_Data_Task_Def eeprom_1_write_buf; //*
__attribute__((at(0x20012A80))) __IO I2c_Data_Task_Def eeprom_1_read_buf; //*
__attribute__((at(0x20012B00))) I2c_Data_Task_Def eeprom_1_write_pool[10]; // 10长度缓冲区
__attribute__((at(0x20012D80))) I2c_Data_Task_Def eeprom_1_read_pool[10];
// 从0x20013000继续

// 串口外设缓冲区 
__attribute__((at(0x20014000))) __IO rt_uint8_t usart_1_rx_msq_buf[1024]; //*
__attribute__((at(0x20014400))) __IO rt_uint8_t usart_1_tx_msq_buf[1024]; //*
__attribute__((at(0x20014800))) __IO rt_uint8_t usart_2_rx_msq_buf[1024]; //*
__attribute__((at(0x20014C00))) __IO rt_uint8_t usart_2_tx_msq_buf[1024]; //*
__attribute__((at(0x20015000))) __IO rt_uint8_t usart_6_rx_msq_buf[1024]; //*
__attribute__((at(0x20015400))) __IO rt_uint8_t usart_6_tx_msq_buf[1024]; //*
__attribute__((at(0x20015800))) __IO rt_uint8_t usart_9_rx_msq_buf[1024]; //*
__attribute__((at(0x20015C00))) __IO rt_uint8_t usart_9_tx_msq_buf[1024]; //*
// 控制台外设收发缓冲区
// 控制台rx不需要缓冲区。这里给别的功能用
// 应用侧缓冲区
// i2c处理缓冲区
__attribute__((at(0x20016000))) I2c_Data_Task_Def i2c_2_rx_app_buf;
__attribute__((at(0x20016040))) I2c_Data_Task_Def i2c_2_tx_app_buf;
__attribute__((at(0x20016080))) I2c_Data_Task_Def i2c_4_rx_app_buf;
__attribute__((at(0x200160C0))) I2c_Data_Task_Def i2c_4_tx_app_buf;
// USB处理缓冲区
__attribute__((at(0x20016100))) rt_uint8_t usb_fs_dp_app_buf[64];
__attribute__((at(0x20016140))) rt_uint8_t usb_fs_dn_app_buf[64];
__attribute__((at(0x20016180))) rt_uint8_t usb_hs_dp_app_buf[64];
__attribute__((at(0x200161C0))) rt_uint8_t usb_hs_dn_app_buf[64];
// SDIO处理缓冲区
__attribute__((at(0x20016200))) rt_uint8_t sdio_1_rx_app_buf[512];
__attribute__((at(0x20016400))) rt_uint8_t sdio_1_tx_app_buf[512];
//__attribute__((at(0x20016000))) rt_uint8_t usart_3_rx_msq_buf[1536];
// rx不需要缓冲区。这里给别的功能用
__attribute__((at(0x20016600))) __IO rt_uint8_t usart_3_tx_msq_buf[1536];
// 从0x20016C00继续
// SDIO1外设收发缓冲区
__attribute__((at(0x20016C00))) __IO rt_uint8_t sdio_1_rx_buf[512];//*
__attribute__((at(0x20016E00))) __IO rt_uint8_t sdio_1_tx_buf[512];//*
// 从0x20017000继续
__attribute__((at(0x20017000))) __IO rt_uint8_t flash_1_write_buf[4096];
__attribute__((at(0x20018000))) __IO rt_uint8_t flash_1_read_buf[4096];
__attribute__((at(0x20019000))) __IO rt_uint8_t flash_1_cache_buf[4096];
__attribute__((at(0x2001A000))) __IO rt_uint8_t flash_2_write_buf[4096];
__attribute__((at(0x2001B000))) __IO rt_uint8_t flash_2_read_buf[4096];
__attribute__((at(0x2001C000))) __IO rt_uint8_t flash_2_cache_buf[4096];
__attribute__((at(0x2001D000))) __IO rt_uint8_t flash_3_write_buf[4096];
__attribute__((at(0x2001E000))) __IO rt_uint8_t flash_3_read_buf[4096];
__attribute__((at(0x2001F000))) __IO rt_uint8_t flash_3_cache_buf[4096];
// SDRAM1 满

// SDRAM2 前48K留给网络 从0x20020000 - 0x2002BFFFF

// 从0x2002C0000开始普通变量区

// SDRAM3 96K ECC 应用数据缓存区

// SDRAM4 32K ECC 应用数据缓存区

//// mqtt收发缓冲区
//__attribute__((at(0x20059800))) char mqtt_message_rx_buf[1536];
//__attribute__((at(0x20059E00))) char mqtt_message_tx_buf[1536];
//__attribute__((at(0x2005A400))) char mqtt_message_tx_build_buf[1536];

//__attribute__((at(0x2005FFFF))) uint8_t lte_status;
//__attribute__((at(0x2005FFFE))) uint8_t lte_connected;
//__attribute__((at(0x2005FFFD))) uint8_t mqtt1_status;
//__attribute__((at(0x2005FF7D))) char mqtt_client_id[128];
//// netp状态。代表成功对时的次数。需要对时的时候会对这个清零。
//// 次数主要是为了进行校正对时。需要多次对时消除误差
//__attribute__((at(0x2005FF7C))) uint8_t sntp_ok;
//__attribute__((at(0x2005FF7B))) uint8_t sntp_faild_times;
//__attribute__((at(0x2005FF5B))) char time_block_buf[32];
///* 时间字符串缓存数组。分别是年月日时分秒星期时区。后俩其实没啥用 */
//__attribute__((at(0x2005FF4B))) char time_str_buf[8][2];
//__attribute__((at(0x2005FF43))) char time_date_buf[8];
//__attribute__((at(0x2005FF42))) uint8_t mems_init_status;
//__attribute__((at(0x2005FEC2))) char time_now_buf[128];
//// 消息id，用来处理回复消息
//uint32_t message_id;

/* 消息邮箱 */
//struct rt_messagequeue gnss_usart_msq;
///* 消息队列中用到的放置消息的内存池 */
//rt_uint8_t gnss_usart_msq_pool[3072];
//char gnss_usart_msq_rx_buf[1536];
//char gnss_usart_rx_buf[1536];

